package com.demo.java.OD601_650.OD607;

import java.util.Scanner;
import java.util.Arrays;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【采样过滤(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146591191
 */
public class OdMain {
    public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();  // 采样数据个数
        int t = in.nextInt();  // 错误容忍次数
        int p = in.nextInt();  // 故障次数阈值
        in.nextLine();  // 处理换行
        Integer[] sample_data = Arrays.stream(in.nextLine().split(" "))
                .map(Integer::parseInt)
                .toArray(Integer[]::new);  // 解析采样数据

        // 判断数据异常，初始化一个 items 数组，用于标记每个数据是否有效
        int[] items = new int[sample_data.length];
        for (int i = 0; i < sample_data.length; i++) {
            // 判断采样数据是否合法
            if (sample_data[i] <= 0) {
                items[i] = 0;  // 数据无效
            } else if (i > 0 && ((sample_data[i] - sample_data[i - 1] >= 10) || sample_data[i] < sample_data[i - 1])) {
                items[i] = 0;  // 数据无效，差值过大或数据回退
            } else {
                items[i] = 1;  // 数据有效
            }
        }

        int i = 0;
        // 遍历采样数据进行修复
        while (i < sample_data.length) {
            // 如果当前数据无效且前一个数据有效，则将当前数据修复为前一个数据
            if (items[i] == 0 && i > 0 && items[i - 1] == 1) {
                sample_data[i] = sample_data[i - 1];
                items[i] = 1;  // 修复后的数据标记为有效
            }

            int error_num = 0;  // 错误数量
            int corrent = 0;    // 修复后的正确数据位置
            int j = i;

            // 计算错误数量并进行修复
            while (m > 0 && j < sample_data.length) {
                if (items[j] == 0) {
                    error_num += 1;
                    // 如果错误数量超过阈值 t，记录错误的位置
                    if (error_num >= t) {
                        corrent = j - 1;  // 修复点位置
                    }
                }
                j += 1;
            }

            // 如果错误数量超过阈值 t，进行修复
            if (error_num >= t) {
                for (int l = i; l <= corrent; l++) {
                    sample_data[l] = sample_data[i - 1];  // 修复数据
                    items[l] = 1;  // 标记为有效
                }
                i = corrent + 1;  // 继续处理后续数据
            } else {
                i += 1;  // 继续检查下一个数据
            }
        }

        // 最后计算并输出修复后的最大连续有效数据长度
        int res = 0;
        int location = 0;
        for (int item : items) {
            if (item != 1) {
                if (location > res) {
                    res = location;  // 记录最大连续有效数据长度
                }
                location = 0;  // 重置连续有效数据计数
            } else {
                location += 1;  // 增加有效数据长度
            }
        }
        System.out.println(Math.max(res, location));  // 输出最大连续有效数据长度
    }
}